1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107 | SQL> SELECT MONTHS_BETWEEN (SYSDATE,HIREDATE ) FROM EMP;
MONTHS_BETWEEN(SYSDATE,HIREDAT
------------------------------
520.18969422043
518.092920026882
518
516.673565188172
510.834855510753
515.705823252688
514.447758736559
444.125178091398
509.18969422043
511.480016801075
442.996145833333
508.641307123656
508.641307123656
506.996145833333
14 rows selected
SQL>
SQL>
SQL> SELECT TRUNC(MONTHS_BETWEEN (SYSDATE,HIREDATE )) FROM EMP;
TRUNC(MONTHS_BETWEEN(SYSDATE,H
------------------------------
520
518
518
516
510
515
514
444
509
511
442
508
508
506
--打印入职人员姓名,及入职的时长(月),并按入职时长来排序。
SQL> select ename, round(months_between (sysdate,hiredate)) from emp order by months_between (sysdate,hiredate) desc;
ENAME ROUND(MONTHS_BETWEEN(SYSDATE,H
---------- ------------------------------
SMITH 520
ALLEN 518
WARD 518
JONES 517
BLAKE 516
CLARK 514
TURNER 511
MARTIN 511
KING 509
JAMES 509
FORD 509
MILLER 507
SCOTT 444
ADAMS 443
14 rows selected
--打印源表,增加date2为离职时间
SQL> select * from emp2;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DATE2 DATE22
----- ---------- --------- ----- ----------- --------- --------- ------ ----------- -----------
7369 SMITH CLERK 7902 1980/12/17 800.00 20 1993/12/3
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30 1992/1/5
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30 1998/3/9
7566 JONES MANAGER 7839 1981/4/2 2975.00 20 1987/4/7
7654 MARTIN SALESMAN 7698 1981/9/28 1250.10 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
7900 JAMES CLERK 7698 1981/12/3 950.00 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
14 rows selected
--date2为离职时间,hiredate为入职时间
--打印所有员工,按离职时间排序,在职的输入为working
--注:working为字符,所有nvl对比时也需要是字符,所以to_char将数字转为字符
SQL> select ename, nvl(to_char(round(months_between(date2,hiredate))),'working') from emp2 order by months_between(date2,hiredate) ;
ENAME NVL(TO_CHAR(ROUND(MONTHS_BETWE
---------- ----------------------------------------
JONES 72
ALLEN 131
SMITH 156
WARD 205
KING working
TURNER working
ADAMS working
JAMES working
FORD working
SCOTT working
MILLER working
BLAKE working
MARTIN working
CLARK working
14 rows selected
|